package com.gengzp.mq.server.service;

import com.gengzp.mq.common.model.base.MqPaginationResult;
import com.gengzp.mq.common.model.req.PageGengzpMqMessageReq;
import com.gengzp.mq.common.model.resp.GengzpMqMessageExt;
import com.gengzp.mq.common.model.resp.PageGengzpMqMessageResp;

/**
 * @ClassName GengzpMqService
 * @Description 消息队列模块服务层接口
 * @Author gengzp
 * @Date 2025/6/8 14:32
 */
public interface IGengzpMqService {

    /**
     * 发送消息
     *
     * @param topic          主题
     * @param messageContent 消息内容
     * @return 消息id
     */
    Long sendMessage(String topic, String messageContent);

    /**
     * 接收消息
     *
     * @param consumerServiceIp   消费者服务ip
     * @param consumerServiceName 消费者服务名称
     * @param topic               主题
     * @param consumerGroup       消费者组
     * @return 消息
     */
    GengzpMqMessageExt receiveMessage(String consumerServiceIp, String consumerServiceName,
                                      String topic, String consumerGroup);

    /**
     * 确认消息
     *
     * @param messageId 消息id
     */
    void confirmMessage(Long messageId);

    /**
     * 分页查询消息
     *
     * @param req 分页查询请求参数实体
     * @return 消息集合
     */
    MqPaginationResult<PageGengzpMqMessageResp> pageQueryMessage(PageGengzpMqMessageReq req);

    /**
     * 分页查询死信队列
     *
     * @param req 分页查询请求参数实体
     * @return 消息集合
     */
    MqPaginationResult<PageGengzpMqMessageResp> pageQueryDeathMessage(PageGengzpMqMessageReq req);

}
